import { setToken, getToken, removeToken } from '@/utils/auth'
import { loginApi, getUserInfoApi } from '@/api/user'
// 状态
const state = {
  token: getToken(),
  userInfo: {}
}
// 同步任务 把token保存到state
const mutations = {
  setUserToken(state, token) {
    state.token = token
  },
  // 将获取到的用户基本信息赋值到Vuex
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  // state.token赋null
  // 调取删除本地存储的放法
  removelayoutToken(state) {
    state.token = null
    removeToken()
  }
}
// 异步任务 调取token

const actions = {
  // 获取用户基本信息
  async getUserInofActions(ctx) {
    const userInfo = await getUserInfoApi()
    ctx.commit('setUserInfo', userInfo)
  },
  // 获取token保存到Vuex和本地持久化
  async loginAction(ctx, loginForm) {
    // 调取登录接口
    const token = await loginApi(loginForm)
    // 保存到Vuex中
    ctx.commit('setUserToken', token)
    // 调用本地持久化方法
    setToken(token)
  },
  // token失效，清空用户登陆痕迹
  removeTokenAction(ctx) {
    // 调用此处mutations中的两个更改state中数据的方法
    ctx.commit('removelayoutToken')
    ctx.commit('setUserInfo', {})
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
